home *** CD-ROM | disk | FTP | other *** search
/ Cream of the Crop 1 / Cream of the Crop 1.iso / PROGRAM / CTOOLS10.ARJ / DLISTTST.C < prev    next >
C/C++ Source or Header  |  1991-12-31  |  2KB  |  101 lines

  1. /* Simple program to test the double list routines */
  2.  
  3. #include <stdio.h>
  4. #include <stdlib.h>
  5. #include <string.h>
  6. #include <time.h>
  7. #include <dos.h>
  8. #include <alloc.h>
  9. #include "dlist.h"
  10.  
  11. #define    PRINT_LIST
  12.  
  13. /* A implementation of a macro to peek at a long value (not in DOS.H)    */
  14.  
  15. #define    peekl(__segment,__offset) (*((long  far*)MK_FP(__segment, __offset)))
  16.  
  17. void randstr(char *s,int length)
  18. {
  19.     int    i;
  20.  
  21.     for (i = 0; i < length; i++)
  22.         s[i] = 'a' + (char)random('z' - 'a');
  23.     s[i] = '\0';
  24. }
  25.  
  26. char *timestr(long time)
  27. {
  28.     int            minutes,seconds,sec100;
  29.     float        totalsecs;
  30.     static char    str[10];
  31.  
  32.     totalsecs = time / 18.2;
  33.     minutes = (int)totalsecs / 60;
  34.     totalsecs -= minutes * 60;
  35.     seconds = (int)totalsecs;
  36.     sec100 = (int)((totalsecs - seconds) * 100);
  37.     sprintf(str,"%02d:%02d.%02d",minutes,seconds,sec100);
  38.     return str;
  39. }
  40.  
  41. void main(void)
  42. {
  43.     DLIST        *list;
  44.     char        *s;
  45.     char        *p;
  46.     char        line[80];
  47.     int            i,size,length;
  48.     long        start,finish;
  49.  
  50.     printf("Size of list to create: ");
  51.     gets(line);
  52.     size = atoi(line);
  53.     printf("Maximum length of strings: ");
  54.     gets(line);
  55.     length = atoi(line);
  56.  
  57.     printf("\nMemory at start: %lu\n",(unsigned long)coreleft());
  58.     printf("\nCreating list of %d random strings of length %d ...\n\n",size,length);
  59.  
  60.     randomize();
  61.     list = dlst_init();
  62.  
  63.     for (i = 0; i < size; i++) {
  64.         s = dlst_newnode(length+1);
  65.         randstr(s,random(length));
  66.         dlst_insertafter(list,s,DLST_HEAD(list));
  67.         if (i == size/2)
  68.             p = s;
  69.         }
  70.  
  71.     printf("Sorting strings...\n\n");
  72.  
  73.     start = peekl(0x40,0x6C);
  74.     dlst_mergesort(list,strcmp);
  75.     finish = peekl(0x40,0x6C);
  76.  
  77.     printf("Time to sort: %s\n",timestr(finish-start));
  78.  
  79. #ifdef    PRINT_LIST
  80.     for (s = dlst_first(list); s; s = dlst_next(s))
  81.         printf("String: %s\n",s);
  82.     printf("\nList in reverse order:\n\n");
  83.     for (s = dlst_last(list); s; s = dlst_prev(s))
  84.         printf("String: %s\n",s);
  85.  
  86.     dlst_freenode(dlst_deletenext(list,p));
  87.     printf("\n\n");
  88.     for (s = dlst_first(list); s; s = dlst_next(s))
  89.         printf("String: %s\n",s);
  90.     printf("\nList in reverse order:\n\n");
  91.     for (s = dlst_last(list); s; s = dlst_prev(s))
  92.         printf("String: %s\n",s);
  93. #endif
  94.  
  95.     printf("\nMemory before deleting list: %lu\n",(unsigned long)coreleft());
  96.  
  97.     dlst_kill(list,dlst_freenode);
  98.  
  99.     printf("\nMemory after deleting list: %lu\n",(unsigned long)coreleft());
  100. }
  101.